import router from '@/router/index.ts'
import { isType } from '@/utils/util.ts'
import { LOGIN_URL } from '@/config/config.ts'
import { ElNotification } from 'element-plus'
import { useStore } from '@/store/index.ts'

// 引入 views 文件夹下所有 vue 文件
const modules = import.meta.glob('@/pages/**/*.vue')

/**
 * 初始化动态路由
 */
export const initDynamicRouter = async () => {
  const { auth } = useStore() as { auth: any }
  const { global } = useStore() as { global: any }
  try {
    // 1.获取菜单列表
    await auth.getAuthMenuList()
    // 2.判断当前用户有没有菜单权限
    if (!auth.authMenuListGet.length) {
      ElNotification({
        title: '无权限访问',
        message: '当前账号无任何菜单权限，请联系系统管理员！',
        type: 'warning',
        duration: 3000,
      })
      // 删除token
      global.setToken('')
      // 重定向到登录页面
      router.replace(LOGIN_URL)
      return Promise.reject('No permission')
    }
    // 3.添加动态路由
    auth.flatMenuListGet.forEach((item: any) => {
      item.children && delete item.children
      if (item.component && isType(item.component) == 'string') {
        item.component = modules['/src/pages' + item.component]
      }
      if (item.meta.isFull) {
        router.addRoute(item)
      } else {
        router.addRoute('layout', item)
      }
    })
  } catch (error) {
    // 💢 当按钮 || 菜单请求出错时，重定向到登陆页
    global.setToken('')
    router.replace(LOGIN_URL)
    return Promise.reject(error)
  }
}
